package org.dromara.common.core.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * @创建者：zhouwei
 * @创建时间：2021/9/29
 * @描述：
 */
public class MathUtil {


	/**
	 * 2个 Int 类型数字 相除 保留2位小数
	 *
	 * @param a
	 * @param b
	 * @return
	 */
	public static double getDoubleByInt(long a, long b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			float f = (float) a / b;
			num = df.format(f);
		}
		return Double.parseDouble(num);
	}

	/**
	 * 2个 Double 类型数字 相除 保留2位小数
	 *
	 * @param a
	 * @param b
	 * @return
	 */
	public static double getDoubleByD(double a, double b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			double f = a / b;
			num = df.format(f);
		}
		return Double.parseDouble(num);
	}

	/**
	 *  对当前小数保留2位
	 *
	 * @param a
	 * @return
	 */
	public static double getDouble(double a) {
//		DecimalFormat df = new DecimalFormat("0.00");
//		String num = "0.00";
//		num = df.format(a);
//		return Double.parseDouble(num);
		BigDecimal bg = new BigDecimal(a).setScale(2, RoundingMode.HALF_UP);
		return bg.doubleValue();
	}

	public static double getDoubleUp(double d){
		BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.HALF_UP);
		return bg.doubleValue();

	}

	/** 保留两位小数，四舍五入的一个老土的方法 */
	public static double formatDouble1(double d) {
		return (double)Math.round(d*100)/100;
	}
	public static double formatDouble2(double d) {
		// 旧方法，已经不再推荐使用
		// BigDecimal bg = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP);
		// 新方法，如果不需要四舍五入，可以使用RoundingMode.DOWN
		BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
		return bg.doubleValue();
	}
	public static String formatDouble3(double d) {
		NumberFormat nf = NumberFormat.getNumberInstance();

		// 保留两位小数
		nf.setMaximumFractionDigits(2);
		// 如果不需要四舍五入，可以使用RoundingMode.DOWN
		nf.setRoundingMode(RoundingMode.UP);
		return nf.format(d);
	}
	/**这个方法挺简单的 */
	public static String formatDouble4(double d) {
		DecimalFormat df = new DecimalFormat("#.00");
		return df.format(d);
	}
	/**如果只是用于程序中的格式化数值然后输出，那么这个方法还是挺方便的, 应该是这样使用：System.out.println(String.format("%.2f", d));*/
	public static String formatDouble5(double d) {
		return String.format("%.2f", d);
	}

	/**
	 *  a 占 b 的百分比
	 * @param a
	 * @param b
	 * @return
	 */
	public static String getRatio(long a, long b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			float f = (float) a / b;
			num = df.format(f*100);
		}
		return num;
	}


	public static void main(String[] args) {
		double d1 = 10.12;
		double d2 = 11.123;
//		double d = getDoubleByInt(123,57);
		double d3 = getDoubleByD(d1,d2);
		System.out.println(d3);


		double fee = MathUtil.getDouble(91523);
		System.out.println("fee:" + fee);


		double d = 12345.67890;
		System.out.println(formatDouble1(d));
		System.out.println(formatDouble2(d));
		System.out.println(formatDouble3(d));
		System.out.println(formatDouble4(d));
		System.out.println(formatDouble5(d));


		double dddd = -100d;

		double d2222 = new BigDecimal(dddd).doubleValue();
		System.out.println(
				"d2222: " + d2222
		);



		int aa = ((180 * 10) / 12) * 60;
		System.out.println("aa:" + aa);
	}


}
